Automatically set :active state on button press/release
authorTimm Bäder <mail@baedert.org>
Fri, 25 Jan 2019 04:39:04 +0000 (05:39 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 29 Jan 2019 06:19:54 +0000 (07:19 +0100)
gtk/gtkmain.c

index a26044b8cbe0a676ff7b1381372c72fb77f1be62..25d39d785d8d86ad6c0186eb80bce73feba5c92d 100644 (file)
@@ -1553,6 +1553,24 @@ is_pointing_event (GdkEvent *event)
     }
 }
 
+static inline void
+set_widget_active_state (GtkWidget       *target,
+                         const gboolean   release)
+{
+  GtkWidget *w;
+
+  w = target;
+  while (w)
+    {
+      if (release)
+        gtk_widget_unset_state_flags (w, GTK_STATE_FLAG_ACTIVE);
+      else
+        gtk_widget_set_state_flags (w, GTK_STATE_FLAG_ACTIVE, FALSE);
+
+      w = gtk_widget_get_parent (w);
+    }
+}
+
 static GtkWidget *
 handle_pointing_event (GdkEvent *event)
 {
@@ -1641,6 +1659,9 @@ handle_pointing_event (GdkEvent *event)
                                           GDK_CROSSING_UNGRAB);
           gtk_window_maybe_update_cursor (toplevel, NULL, device);
         }
+
+      set_widget_active_state (target, event->any.type == GDK_BUTTON_RELEASE);
+
       break;
     case GDK_SCROLL:
     case GDK_TOUCHPAD_PINCH: